/***********************************************************************
 * 描述:
 * File:    cxicomboboxbase.h
 * Author:  chenanqi@mozihealthcare.cn
 * Date:    2025/10/20 10:08
 * Update:  
 **********************************************************************/

#ifndef COREXI_COMMON_PC_CXICOMBOBOXBASE_H
#define COREXI_COMMON_PC_CXICOMBOBOXBASE_H

#include <QWidget>
class QLineEdit;
class QToolButton;
class QHBoxLayout;

class CxiComboBoxBase : public QWidget
{
	Q_OBJECT
public:
	explicit CxiComboBoxBase(QWidget* parent = nullptr);
	~CxiComboBoxBase() override;

public:
	/**
	 * 添加到布局 简单设置比例
	 * @param num1
	 * @param num2
	 * @param num3
	 */
	void add2Layout(int num1 = 1, int num2 = 0, int num3 = 0);

	/**
	 * 设置按钮文本
	 * @param text 文本
	 */
	void setBtnText(const QString& text);

	/**
	 * 设置输入框最小宽度
	 * @param width 宽
	 */
	void setLineMinWidth(int width);

	/**
	 * 设置按钮大小
	 * @param width 宽
	 * @param height 高
	 */
	void setBtnSize(int width, int height);

	/**
	 * 获取输入框最小宽度
	 * @return
	 */
	int lineMinWidth() const;

	/**
	 * 获取按钮宽度
	 * @return
	 */
	int btnWidth() const;

	/**
	 * 设置标签宽度
	 * @param width 宽度
	 */
	void setWidgetFixedWidth(int width);

	/**
	 * 刷新方法
	 */
	void refreshTagLayout();

	/**
	 * 是否显示popup按钮
	 * @param count item的数量
	 */
	void isShowPopupButton(int count);

	/**
	  * 设置刷新标签布局策略
	  */
	void setTagWidgetLayoutPolicy();

	/**
	   * 设置更新策略
	   */
	void setUpdatesEnabled(bool enabled);

	/**
	    * 获取输入框内容
	    */
	QString lineEditText() const;

	/**
	  * 添加标签
	  * @param widget
	  */
	void addWidget(QWidget* widget);

	/**
	 * 获取标签间距
	 * @return 间距值
	 */
	int getWidgetSpacing();

	/**
	 * 组件后置
	 */
	 void resetPopupBox(QWidget* tag);

	 /**
	  * 移除标签
	  * @param tag
	  */
	 void removeTag(QWidget* tag);

	 /**
	  * 设置焦点
	  */
	 void setFocus2LineEdit();

	 bool lineEditorHasFocus();
private:
	void init();

	void initConnect();

signals:
	/**
	 * 文本改变信号
	 */
	void textEditFinished();

	/**
	 * 显示popup信号
	 */
	void showPopup();

private:
	// 存放选中的display
	QWidget* m_tagWidget;
	// 搜索栏
	QLineEdit* m_searchLineEdit;
	// 搜索按钮
	QToolButton* m_popupButton;
	// 布局
	QHBoxLayout* m_layout;
	// 存放tag的布局
	QHBoxLayout* m_tagLayout;
};


#endif//COREXI_COMMON_PC_CXICOMBOBOXBASE_H
